Матч 330, Сортируемость (Sortness)

Дивизион 2, Уровень 1

 

Сортируемостью массива называется среднее арифметическое сортируемости каждого его элемента. Сортируемостью элемента называется количество чисел, больших его и стоящих слева, плюс количество чисел, меньших его и стоящих справа. По заданному массиву натуральных чисел найти его сортируемость.

 

Класс: Sortness

Метод: double getSortness(vector<int> a)

Ограничения: a содержит от 1 до 50 элементов, массив a содержит все числа от 1 до n (n – количество элементов в массиве a) по одному разу.

 

Вход. Массив чисел a.

 

Выход. Сортируемость входного массива.

 

Пример входа

a

{3,2,1,4,6,7,5,8}

{1,2,3}

{1,5,8,7,9,6,10,12,11,3,4,2}

 

Пример выхода

1.25

0.0

5.166666666666667

 

 

РЕШЕНИЕ

обработка массива

 

Сортируемость отсортированного по возрастанию массива чисел равна нулю. Если два числа i и j в массиве стоят неправильно (образуют инверсию), то при подсчете сортируемости каждого из этих элементов следует прибавить по единице. Таким образом для решения задачи достаточно подсчитать количество инверсий в массиве, умножить полученно число на 2 и разделить на количество элементов.

 

ПРОГРАММА

 

#include <cstdio>

#include <vector>

using namespace std;

 

class Sortness

{

public:

  double getSortness(vector<int> a)

  {

    int i, j, len = a.size(), res = 0;

    for(i = 0; i < len - 1; i++)

      for(j = i + 1; j < len; j++)

        if (a[i] > a[j]) res += 2;

    return (double)res / len;

  }

};